package com.project.biz;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.project.entity.CmsUser;
import com.project.pojo.dto.TuserDTO;
import com.project.pojo.dto.UserDTO;
import com.project.pojo.dto.UserLoginDTO;
import com.project.pojo.dto.UserLoginPcDTO;
import com.project.pojo.model.*;
import com.project.pojo.vo.UserLoginVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
* @Description:   用户业务层接口类
* @Author:         wangzhiqiang
* @CreateDate:     2019-02-27 9:19
* @Version:        1.0
*/
public interface UserBiz extends IService<CmsUser> {

    /**
     * 根据条件获取用户信息
     * @param userQuery
     * @return
     */
    List<UserDTO> getUser(UserQuery userQuery);

    /**
     * 按条件分页查询用户及上级信息
     * @param userQuery
     * @return
     */
    IPage<UserDTO> selectUserByQuery(UserQuery userQuery);

    /**
     * 分页查询用户列表
     * @return
     */
    IPage<CmsUser> getUserByCondition(UserQuery userQuery);

    /**
     * 代理查询用户列表
     * @return
     */
    IPage<UserDTO> getAgentUsers(UserQuery userQuery);

    /**
     * 用户登录（根据密码登录）
     * @return
     */
    UserLoginVO login(UserLoginPcDTO userLoginPcDTO, HttpServletRequest request);

    /**
     * 用户登录（根据验证码登录）
     * @return
     */
    UserLoginVO userLogin(UserLoginDTO userLoginDTO);

    /**
     * 注册
     * @param userRegisterModel
     * @return
     */
    Integer userRegister(UserRegisterModel userRegisterModel);

    /**
     * 执行用户注册操作
     * @param userRegisterModel
     * @return 0失败,1：成功
     * @return
     */
    int doUserRegister(UserRegisterModel userRegisterModel);

    /**
     * 根据邀请码获取用户
     * @param invitationCode
     * @return
     */
    CmsUser getUserByInvitationCode(String invitationCode);

    /**
     * 根据手机号获取用户
     * @param mobile
     * @return
     */
    CmsUser getUserByMobile(String mobile);

    /**
     * 修改个人信息
     * @param updateUserModel
     * @param userId
     * @return
     */
    Integer updateUserInfo(UpdateUserModel updateUserModel, Long userId);

    /**
     * 设置支付密码
     * @param updatePayPasswordModel
     * @param userId
     * @return
     */
    Integer updatePayPassword(UpdatePayPasswordModel updatePayPasswordModel, Long userId);

    /**
     * 修改支付密码
     * @param editPayPasswordModel
     * @return
     */
    Integer editPayPassword(EditPayPasswordModel editPayPasswordModel, Long userId);

    /**
     * 修改支付密码（根据登录密码验证）
     * @param editPayPasswordByLoginModel
     * @return
     */
    Integer editPayPasswordByLogin(EditPayPasswordByLoginModel editPayPasswordByLoginModel, Long userId);

    /**
     * 添加后台用户
     * @param addPcUserModel
     * @param userId
     * @return
     */
    Integer addPcUser(AddPcUserModel addPcUserModel, Long userId);

    /**
     * 设置缓存用户信息
     * @param users
     * @return
     */
    int setTUsers(TuserDTO users);

    /**
     * 获取缓存用户信息
     * @return
     */
    TuserDTO getTUsers();

    /**
     * 删除缓存用户信息
     * @return
     */
    void delTusers();

    /**
     * 发送验证码
     * @param mobile
     * @return
     */
    boolean sendValidateCode(String mobile, String code);

    /**
     * 修改密码/忘记密码
     * @param updatePasswordModel
     * @return
     */
    Integer updatePassword(UpdatePasswordModel updatePasswordModel, Long userId);

    /**
     * 根据旧密码修改密码
     * @param updatePasswordByPasswordModel
     * @param userId
     * @return
     */
    int updatePasswordByPasswordModel(UpdatePasswordByPasswordModel updatePasswordByPasswordModel, Long userId);

    /**
     * 设置缓存
     * @param mobile
     * @return
     */
    String saveVerifyCode(String mobile);

    /**
     * 获取验证码
     * @param mobile
     * @return
     */
    String findCodeById(String mobile);

    /**
     * 清除验证码缓存
     * @param mobile
     */
    void delVerifyCode(String mobile);

    /**
     * 根据用户ID获取所有子集用户,包括自身
     * @param userId
     * @return
     */
    List<CmsUser> getChilderUsers(Long userId);

    /**
     * 根据父级查询子集
     * @param userId
     * @return
     */
    List<CmsUser> getByParentId(Long userId);

    /**
     * 后台-添加普通用户
     * @param pcAddUserModel
     * @param userId 操作人ID
     * @return
     */
     int addUser(PcAddUserModel pcAddUserModel, Long userId);

    /**
     * 冻结/解冻用户
     * @param frozenOrThawUserModel
     * @param updateUser
     * @return
     */
     int frozenOrThawUser(FrozenOrThawUserModel frozenOrThawUserModel, Long updateUser);

    /**
     * 后台重置用户登录密码
     * @param resetPasswordModel
     * @param userId 操作人
     * @return
     */
     int resetPassword(ResetPasswordModel resetPasswordModel, Long userId);

    /**
     * 更新用户信息-
     * @return
     */
    int updateProject(String path);

    /**
     * 修改用户手机号
     * @param updateUserMobileModel
     * @param userId 操作者ID
     * @return
     */
    int updateUserMobile(UpdateUserMobileModel updateUserMobileModel, Long userId);

    /**
     * 更新用户为回收员
     * @param userId
     * @return
     */
    int updateUserToRecoveryMmber(Long userId);

    /**
     * 更新回收员为普通用户
     * @param userId
     * @return
     */
    int updateUserStopRecoveryMmber(Long userId);

}
